package com.mtiiot.fscore.inter1;

import com.mtiiot.fscore.bean.MetadataInfo;
import com.mtiiot.fscore.bean.elasticsearch.metadata.BaseBean;

import java.util.List;
import java.util.Map;

/**
 * fs服务接口版本1.1
 * nosql服务接口
 * Created by lcy on 16-8-14.
 */
public interface ElasticsearchService1 {
      /**
       * * * test ok
      * 创建文档记录(同步操作)
      * @param metadataInfo 元数据信息
      * @param index 文档索引名称
      * @param type 文档索引类型
      * @param bean 文档bean信息
      * @return boolean success or failure
      */
      public boolean createIndex(MetadataInfo metadataInfo, String index, String type, BaseBean bean);

      /**
       * * * test ok
      * 批量创建文档数据(同步操作)
      * @param metadataInfo 元数据信息
      * @param index 文档索引名称
      * @param type 对应关系型数据库的表名
      * @param beans 文档bean信息的list集合
      * @return boolean success or failure
      */
      public boolean batchCreateIndex(MetadataInfo metadataInfo, String index, String type, List<BaseBean> beans);


    /**
     * 先删除后创建文档记录(同步操作)
     * @param metadataInfo 元数据信息
     * @param index 文档索引名称
     * @param type 文档索引类型
     * @param bean 文档bean信息
     * @return boolean success or failure
     */
    public boolean deleteAndCreateIndex(MetadataInfo metadataInfo, String index, String type, BaseBean bean);

    /**
     * 批量先删除后创建文档数据(同步操作)
     * @param metadataInfo 元数据信息
     * @param index 文档索引名称
     * @param type 对应关系型数据库的表名
     * @param beans 文档bean信息的list集合
     * @return boolean success or failure
     */
    public boolean batchDeleteAndCreateIndex(MetadataInfo metadataInfo, String index, String type, List<BaseBean> beans);

    /**
     * * * test ok
     * 根据id更新数据(同步操作)
     * @param metadataInfo
     * @param type
     * @param index 文档索引名称
     * @param id
     * @param map
     * @return
     */

    public boolean updateIndex(MetadataInfo metadataInfo, String index, String type, String id, Map<String, Object> map);

    /**
     * * * * test ok
     * 批量根据id更新数据(同步操作)
     * @param metadataInfo
     * @param type
     * @param index 文档索引名称
     * @param map
     * @return
     */
    public boolean batchUpdateIndex(MetadataInfo metadataInfo, String index, String type, Map<String, Map<String, Object>> map);

    /**
     * test ok
     * 根据id删除数据(同步操作)
     * @param metadataInfo
     * @param type
     * @param index 文档索引名称
     * @param id
     * @return
     */
    public boolean deleteIndex(MetadataInfo metadataInfo, String index, String type, String id);

    /**
     * test ok
     * 批量根据id删除数据(同步操作)
     * @param metadataInfo
     * @param type
     * @param index 文档索引名称
     * @param ids
     * @return
     */
    public boolean batchDeleteIndex(MetadataInfo metadataInfo, String index, String type, List<String> ids);




      /**
      * 创建文档记录(异步操作 进消息队列)
      * @param metadataInfo 元数据信息
      * @param index 文档索引名称
      * @param type 对应关系型数据库的表名
      * @param bean 文档bean信息
      * @return boolean success or failure
      */
      public boolean createIndexByAsy(MetadataInfo metadataInfo, String index, String type, BaseBean bean);



     /**
      * 批量创建文档数据(异步操作)
      * @param metadataInfo 元数据信息
      * @param index 文档索引名称
      * @param type 对应关系型数据库的表名
      * @param beans 文档bean信息的list集合
      * @return boolean success or failure
     */
      public boolean batchCreateIndexByAsy(MetadataInfo metadataInfo, String index, String type, List<BaseBean> beans);



    /**
     * 根据id更新数据(同步操作)
     * @param metadataInfo
     * @param type
     * @param index 文档索引名称
     * @param id
     * @param map
     * @return
     */
    public boolean updateIndexByAsy(MetadataInfo metadataInfo, String index, String type, String id, Map<String, Object> map);

    /**
     * 批量根据id更新数据(同步操作)
     * @param metadataInfo
     * @param type
     * @param index 文档索引名称
     * @param map
     * @return
     */
    public boolean batchUpdateIndexByAsy(MetadataInfo metadataInfo, String index, String type, Map<String, Map<String, Object>> map);

    /**
     * 根据id删除数据(同步操作)
     * @param metadataInfo
     * @param type
     * @param index 文档索引名称
     * @param id
     * @return
     */
    public boolean deleteIndexByAsy(MetadataInfo metadataInfo, String index, String type, String id);

    /**
     * 批量根据id删除数据(同步操作)
     * @param metadataInfo
     * @param type
     * @param index 文档索引名称
     * @param ids
     * @return
     */
    public boolean batchDeleteIndexByAsy(MetadataInfo metadataInfo, String index, String type, List<String> ids);


}
